#ifndef UART_H_
#define UART_H_
/*******************************************************************************
 * File name: 		uart.h
 * Description: 
 * Project: 		uart
 * Target: 			LPC2478
 * Compiler: 		arm-none-eabi-gcc
 * Date: 			05-06-2012
 * Author: 			Kuba
 * Based on: 		---
 ******************************************************************************/

/*==============================================================================
 Includes
==============================================================================*/
# include <stdbool.h>
# include "irq.h"
/*==============================================================================
 Defines
==============================================================================*/

/*==============================================================================
 Types
==============================================================================*/
enum uartBaud {
   uartBAUD_50,
   uartBAUD_75,
   uartBAUD_110,
   uartBAUD_134,
   uartBAUD_150,
   uartBAUD_200,
   uartBAUD_300,
   uartBAUD_600,
   uartBAUD_1200,
   uartBAUD_1800,
   uartBAUD_2400,
   uartBAUD_4800,
   uartBAUD_9600,
   uartBAUD_19200,
   uartBAUD_38400,
   uartBAUD_57600,
   uartBAUD_64000,
   uartBAUD_115200,
   uartBAUD_125000,
   uartBAUD_230400,
   uartBAUD_460800,
   uartBAUD_576000
};

enum uartStopBit {
   uartSTOP_BIT_1,
   uartSTOP_BIT_2
};

enum uartParity {
   uartPARITY_DISABLE,
   uartPARITY_ODD,
   uartPARITY_EVEN,
   uartPARITY_MARK,
   uartPARITY_SPACE
};

enum uartWordLen {
   uartWORD_LENGTH_5BIT,
   uartWORD_LENGTH_6BIT,
   uartWORD_LENGTH_7BIT,
   uartWORD_LENGTH_8BIT
};

enum uartTxIrq {
   uartTX_IRQ_DISABLE,
   uartTX_IRQ_ENABLE
};

enum uartRxIrq {
   uartRX_IRQ_DISABLE,
   uartRX_IRQ_ENABLE
};

enum uartTxIrqLvl {
   uartTX_IRQ_TRIGGER_LEVEL_1,
   uartTX_IRQ_TRIGGER_LEVEL_2
};

enum uartRxIrqLvl {
   uartRX_IRQ_TRIGGER_LEVEL_1,
   uartRX_IRQ_TRIGGER_LEVEL_4,
   uartRX_IRQ_TRIGGER_LEVEL_8,
   uartRX_IRQ_TRIGGER_LEVEL_14
};

struct uartConf {
   enum uartBaud              baud;
   enum uartStopBit           stopBit;
   enum uartParity            parity;
   enum uartWordLen           wordLen;
   /* interrupts */
   enum uartTxIrq             txIrq;
   enum uartRxIrq             rxIrq;
   enum uartRxIrqLvl          rxIrqLvl;
   void (*txIrqService) (void);           /* user service for TX interrupt */
   void (*rxIrqService) (void);           /* user service for RX interrupt */
   void (*timeoutService)(void);          /* user service for transmission timeout */
};

/*==============================================================================
 Globals
==============================================================================*/

/*==============================================================================
 Global function prototypes
==============================================================================*/
bool uart2Init       (const struct uartConf *uartConf);

void uart2Tx         (const uint8 *txBuff, const uint32 size);
void uart2Rx         (uint8 *rxBuff, const uint32 size);

void uart2IrqTxEnable(const uint8 *txBuff, const uint32 size);
void uart2IrqRxEnable(uint8 *rxBuff, const uint32 size);

void  uart2PutChar   (const char character);
uint8 uart2GetChar   (void);

/******************************************************************************
* END OF FILE
******************************************************************************/



#endif /* UART_H_ */
